<template>
  <div class="menus-manage">
    <!-- 面包屑 -->
    <div class="bread-crumbs">
      <el-breadcrumb separator="/">
        <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
        <el-breadcrumb-item>归集历史</el-breadcrumb-item>
      </el-breadcrumb>
    </div>
    <div class="main-middle">
      <el-card class="box-card">
        <!-- 查询条件 -->
        <el-row class="table-selbox" v-if="btnSel">
          <!-- 查询条件表单 -->
          <el-form :inline="true" :model="formInline" >
            <!-- 员工姓名 -->
            <el-form-item label="月份选择">
              <!-- 员工选择框子组件 -->
              <el-date-picker v-model="formInline.month" type="month" placeholder="选择月"></el-date-picker>
            </el-form-item>
            <!-- 搜索 -->
            <el-form-item>
              <el-button icon="el-icon-search" @click="selHandle">搜索</el-button>
            </el-form-item>
            <el-button type="success" size="medium" style="float:right;" @click="download">
              <i class="fa fa-cloud-download" aria-hidden="true"></i> 下载
            </el-button>
          </el-form>
        </el-row>

        <!-- 数据列表 -->
        <el-table
          :data="menusData"
          border
          style="width: 100%"
          height="395"
          ref="menusData"
        >
          <!-- 工号 -->
          <el-table-column prop="userId" label="工号" width="120"></el-table-column>
          <!-- 姓名 -->
          <el-table-column prop="userName" label="姓名" width="120"></el-table-column>
          <!-- 上市部门 -->
          <el-table-column
            prop="deptName"
            sortable
            label="部门"
            :show-overflow-tooltip="true"
            width="150"
          ></el-table-column>
          <!-- 口径 -->
          <el-table-column prop="typeName" sortable label="口径" width="120"></el-table-column>
          <!-- 项目 -->
          <el-table-column
            prop="proName"
            sortable
            label="项目"
            :show-overflow-tooltip="true"
          ></el-table-column>
          <!-- 模块 -->
          <el-table-column
            prop="moduleName"
            sortable
            label="模块"
            :show-overflow-tooltip="true"
            width="150"
          ></el-table-column>
          <!-- 级别 -->
          <el-table-column prop="level" sortable label="级别" width="100"></el-table-column>
        </el-table>
        <!-- 分页 -->
        <div class="table-pageblock">
          <!-- current-page 当前页数  page-size 每页显示数 total 总页数-->
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="currentPage"
            :page-sizes="[20,50,80,100]"
            :page-size="pageSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total"
          ></el-pagination>
        </div>
      </el-card>
    </div>
  </div>
</template>

<script>
// 引入时间格式化插件
import moment from 'moment';

export default {
  name: 'sumlog',
  // 父组件传值子组件
  props: {
    // 按钮级权限
    btns: {
      type: Object
    }
  },

  // 无白屏刷新方法注入
  inject: ['reload'],

  // 监听
  watch: {
    // 按钮权限数据
    btns (val, oldVal) {
      // 刷新当前页
      this.reload();
    }
  },

  // 创建实例后执行
  created () {
    // 按钮级授权
    this.authorization(this.$store.state.btns);

    // 加载分页数据
    this.getmenusDataByPage();
  },

  // 过滤器
  filters: {
    // 时间显示过滤
    filterTime (value) {
      return moment(value).format('YYYY-MM-DD HH:mm:ss');
    }
  },

  // 当前页面数据
  data () {
    return {
      // 按钮显示隐藏  - 默认值
      btnSel: true,
      btnDel: true,
      btnUpload: true,
      btnDown: true,
      btnAdd: true,
      btnEdit: true,

      // 搜索条件
      formInline: {
        month: ''
      },

      // 列表数据
      menusData: [{}],
      // 当前页
      currentPage: 1,
      // 当前数
      pageSize: 20,
      // 总条目数
      total: 20
    };
  },

  methods: {

    // 按钮级授权
    authorization (data) {
      let _this = this;
      for (let i in data) {
        if (data['sel'] === 0) {
          _this.btnSel = false;
        }
        if (data['add'] === 0) {
          _this.btnAdd = false;
        }
        if (data['del'] === 0) {
          _this.btnDel = false;
        }
        if (data['upload'] === 0) {
          _this.btnUpload = false;
        }
        if (data['down'] === 0) {
          _this.btnDown = false;
        }
        if (data['edit'] === 0) {
          _this.btnEdit = false;
        }
        return i;
      }
    },

    // 查询
    selHandle: function () {
      let _this = this;
      // 收集请求数据
      let params = {
        year: '',
        month: '',
        pageNum: _this.currentPage,
        pageSize: _this.pageSize
      };
      // Fri Mar 01 2019 00:00:00 GMT+0800
      let dateMonth = _this.formInline.month;
      params.year = dateMonth.getFullYear();
      params.month = dateMonth.getMonth() + 1;

      // 根据年月查询分页数据
      _this.$http.raw('api/findColHisByMonthAndYear', params).then(res => {
        let { code, datas } = res;
        // 判断Code状态
        if (code === 0) {
          // 总页数
          _this.total = datas.total;
          // 数据结果集
          _this.menusData = datas.list;
          // 解决删除当前页数据后仍留在那一页 不跳回上一页的bug
          if (!datas.list.length && _this.currentPage !== 1) {
            // 当前页减一
            _this.currentPage -= 1;
            // 调用自己
            _this.getmenusDataByPage();
          }
        }
      }).catch(err => {
        if (err === undefined) {
          _this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    },

    download () {
      let _this = this;
      let dateMonth = _this.formInline.month;

      if (dateMonth === '' || dateMonth === null || dateMonth === undefined) {
        _this.$message({
          message: '请选择具体月份！',
          type: 'error'
        });
        return false;
      } else {
        let year = dateMonth.getFullYear() + 0;
        let month = dateMonth.getMonth() + 1;

        // 根据年月查询下载数据
        _this.$http.download('api/downColHis?year=' + year + '&month=' + month).then(res => {
          let blob = new Blob([res], {type: res.type});
          let downloadElement = document.createElement('a');
          let href = window.URL.createObjectURL(blob); // 创建下载的链接
          downloadElement.href = href;
          downloadElement.download = '归集历史.xlsx'; // 下载后文件名
          document.body.appendChild(downloadElement);
          downloadElement.click(); // 点击下载
          document.body.removeChild(downloadElement); // 下载完成移除元素
          window.URL.revokeObjectURL(href); // 释放blob对象
        }).catch(err => {
          if (err === undefined) {
            _this.$message({
              message: '服务器响应异常！',
              type: 'error'
            });
            return false;
          }
        });
      }
    },

    // 刷新页面数据
    getmenusDataByPage () {
      let _this = this;
      // 收集请求参数
      let params = {
        year: '',
        month: '',
        pageNum: _this.currentPage,
        pageSize: _this.pageSize
      };

      // 获取分页数据
      _this.$http.raw('api/findColHisByMonthAndYear', params).then(res => {
        let { code, datas } = res;
        if (code === 0) {
          // 总页数
          _this.total = datas.total;
          // 数据结果集
          _this.menusData = datas.list;
          // 解决删除当前页数据后仍留在那一页 不跳回上一页的bug
          if (!datas.list.length && _this.currentPage !== 1) {
            // 当前页减一
            _this.currentPage -= 1;
            // 调用自己
            _this.getmenusDataByPage();
          }
        }
      }).catch(err => {
        if (err === undefined) {
          _this.$message({
            message: '服务器响应异常！',
            type: 'error'
          });
          return false;
        }
      });
    },

    // 每页显示的条数改变
    handleSizeChange (val) {
      this.pageSize = val;
      // 调用刷新页面
      this.getmenusDataByPage();
    },
    // 当前页码
    handleCurrentChange (val) {
      this.currentPage = val;
      // 调用
      this.getmenusDataByPage();
    }
  }
};
</script>

<style lang='scss' scoped>
@import './index.scss';
</style>
